package com.framework.state.impl;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;

import com.framework.constantes.IResolucion4505Constantes;

public class GeneradorArchivoExcel4505 extends GeneradorArchivo4505Impl {

	private HSSFWorkbook libroMetasMatriz;
	private int row = 3;
	private HSSFSheet hoja1;
	private HSSFCellStyle style;

	
	private void agregarCelda(org.apache.poi.ss.usermodel.Row filaCol,
			int initCol, String nombre, CellStyle styleHeader) {
		org.apache.poi.ss.usermodel.Cell celda = filaCol.createCell(initCol,
				org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING);
		celda.setCellValue("" + nombre);
		celda.setCellStyle(styleHeader);
	}
	
	public GeneradorArchivoExcel4505() {
		libroMetasMatriz = new HSSFWorkbook();
		hoja1 = libroMetasMatriz
				.createSheet("informacion Resolucion 4505");
	}

	@Override
	public void onMontarCabecera() {
		// creamos frozen
		hoja1.createFreezePane(0, 3);

		HSSFFont fontBoldTitulo = (HSSFFont) libroMetasMatriz.createFont();
		fontBoldTitulo.setFontName(HSSFFont.FONT_ARIAL);
		fontBoldTitulo.setFontHeightInPoints((short) 10);
		fontBoldTitulo.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		fontBoldTitulo.setColor(HSSFColor.BLACK.index);

		HSSFFont fontBold = (HSSFFont) libroMetasMatriz.createFont();
		fontBold.setFontName(HSSFFont.FONT_ARIAL);
		fontBold.setFontHeightInPoints((short) 10);
		// fontBold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		fontBold.setColor(HSSFColor.BLACK.index);

		// agregamos cabecera
		CellStyle styleNombre_empresa = libroMetasMatriz.createCellStyle();
		styleNombre_empresa.setFont(fontBoldTitulo);
		styleNombre_empresa.setAlignment(CellStyle.ALIGN_CENTER);
		styleNombre_empresa.setBorderTop(CellStyle.BORDER_THIN);
		styleNombre_empresa.setBorderBottom(CellStyle.BORDER_THIN);
		styleNombre_empresa.setBorderLeft(CellStyle.BORDER_THIN);
		styleNombre_empresa.setBorderRight(CellStyle.BORDER_THIN);
		// styleNombre_empresa.setRightBorderColor(HSSFColor.WHITE.index);
		// styleNombre_empresa.setLeftBorderColor(HSSFColor.WHITE.index);
		styleNombre_empresa
				.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
		styleNombre_empresa.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

		style = (HSSFCellStyle) libroMetasMatriz
				.createCellStyle();
		style.setBorderTop(CellStyle.BORDER_THIN);
		style.setBorderBottom(CellStyle.BORDER_THIN);
		style.setBorderLeft(CellStyle.BORDER_THIN);
		style.setBorderRight(CellStyle.BORDER_THIN);
		// style.setRightBorderColor(HSSFColor.WHITE.index);
		// style.setLeftBorderColor(HSSFColor.WHITE.index);
		style.setFont(fontBold);

		// generamos fila de control
		int row = 0; 
		int initCol = 0;
		org.apache.poi.ss.usermodel.Row filaCol = hoja1.createRow(row++);
		agregarCelda(filaCol, initCol++, "REGISTRO CONTROL",
				styleNombre_empresa);
		agregarCelda(filaCol, initCol++, "CODIGO ASEGURADORA",
				styleNombre_empresa);
		agregarCelda(filaCol, initCol++, "FECHA INICIAL", styleNombre_empresa);
		agregarCelda(filaCol, initCol++, "FECHA_FINAL", styleNombre_empresa);
		agregarCelda(filaCol, initCol++, "TOTAL REGISTRO", styleNombre_empresa);

		// generamos fila de control
		initCol = 0;
		filaCol = hoja1.createRow(row++);
		agregarCelda(filaCol, initCol++, registroControl + "", style);
		agregarCelda(filaCol, initCol++, codigo_administradora + "", style);
		agregarCelda(filaCol, initCol++, fecha_inicio + "", style);
		agregarCelda(filaCol, initCol++, fecha_final + "", style);
		agregarCelda(filaCol, initCol++, total + "", style);

		// generamos fila de informacion de variable
		filaCol = hoja1.createRow(row++);
		initCol = 0;
		for (int i = 0; i <= IResolucion4505Constantes.TOTAL_VARIABLES; i++) {
			String nombre_variable = "variable " + i;
			agregarCelda(filaCol, initCol++, "" + nombre_variable,
					styleNombre_empresa);
		}
	}

	@Override
	public File getFile(File dir_guardado) throws Exception{
		for (int i = 0; i <= IResolucion4505Constantes.TOTAL_VARIABLES; i++) {
			hoja1.autoSizeColumn((short) i);
		}
		
		String nombre_completo_archivo = dir_guardado.getAbsoluteFile() + File.separator
				+ nombre;
		File archivo_excel = new File(nombre_completo_archivo);
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(archivo_excel);
			libroMetasMatriz.write(fos);
		} finally {
			if (fos != null) {
				try {
					fos.flush();
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return archivo_excel;
	}

	@Override
	public synchronized void onAgregarLinea(LineaBean lineaBean) {
		org.apache.poi.ss.usermodel.Row filaCol = hoja1.createRow(row++);
		int initCol = 0;
		agregarCelda(filaCol, initCol++, lineaBean.var0, style);
		agregarCelda(filaCol, initCol++, (++total) + "", style);
		agregarCelda(filaCol, initCol++, lineaBean.var2, style); 
		agregarCelda(filaCol, initCol++, lineaBean.var3, style);
		agregarCelda(filaCol, initCol++, lineaBean.var4, style);
		agregarCelda(filaCol, initCol++, lineaBean.var5, style);
		agregarCelda(filaCol, initCol++, lineaBean.var6, style);
		agregarCelda(filaCol, initCol++, lineaBean.var7, style);
		agregarCelda(filaCol, initCol++, lineaBean.var8, style);
		agregarCelda(filaCol, initCol++, lineaBean.var9, style);
		agregarCelda(filaCol, initCol++, lineaBean.var10, style);
		agregarCelda(filaCol, initCol++, lineaBean.var11, style);
		agregarCelda(filaCol, initCol++, lineaBean.var12, style);
		agregarCelda(filaCol, initCol++, lineaBean.var13, style);
		agregarCelda(filaCol, initCol++, lineaBean.var14, style);
		agregarCelda(filaCol, initCol++, lineaBean.var15, style);
		agregarCelda(filaCol, initCol++, lineaBean.var16, style);
		agregarCelda(filaCol, initCol++, lineaBean.var17, style);
		agregarCelda(filaCol, initCol++, lineaBean.var18, style);
		agregarCelda(filaCol, initCol++, lineaBean.var19, style);
		agregarCelda(filaCol, initCol++, lineaBean.var20, style);
		agregarCelda(filaCol, initCol++, lineaBean.var21, style);
		agregarCelda(filaCol, initCol++, lineaBean.var22, style);
		agregarCelda(filaCol, initCol++, lineaBean.var23, style);
		agregarCelda(filaCol, initCol++, lineaBean.var24, style);
		agregarCelda(filaCol, initCol++, lineaBean.var25, style);
		agregarCelda(filaCol, initCol++, lineaBean.var26, style);
		agregarCelda(filaCol, initCol++, lineaBean.var27, style);
		agregarCelda(filaCol, initCol++, lineaBean.var28, style);
		agregarCelda(filaCol, initCol++, lineaBean.var29, style);
		agregarCelda(filaCol, initCol++, lineaBean.var30, style);
		agregarCelda(filaCol, initCol++, lineaBean.var31, style);
		agregarCelda(filaCol, initCol++, lineaBean.var32, style);
		agregarCelda(filaCol, initCol++, lineaBean.var33, style);
		agregarCelda(filaCol, initCol++, lineaBean.var34, style);
		agregarCelda(filaCol, initCol++, lineaBean.var35, style);
		agregarCelda(filaCol, initCol++, lineaBean.var36, style);
		agregarCelda(filaCol, initCol++, lineaBean.var37, style);
		agregarCelda(filaCol, initCol++, lineaBean.var38, style);
		agregarCelda(filaCol, initCol++, lineaBean.var39, style);
		agregarCelda(filaCol, initCol++, lineaBean.var40, style);
		agregarCelda(filaCol, initCol++, lineaBean.var41, style);
		agregarCelda(filaCol, initCol++, lineaBean.var42, style);
		agregarCelda(filaCol, initCol++, lineaBean.var43, style);
		agregarCelda(filaCol, initCol++, lineaBean.var44, style);
		agregarCelda(filaCol, initCol++, lineaBean.var45, style);
		agregarCelda(filaCol, initCol++, lineaBean.var46, style);
		agregarCelda(filaCol, initCol++, lineaBean.var47, style);
		agregarCelda(filaCol, initCol++, lineaBean.var48, style);
		agregarCelda(filaCol, initCol++, lineaBean.var49, style);
		agregarCelda(filaCol, initCol++, lineaBean.var50, style);
		agregarCelda(filaCol, initCol++, lineaBean.var51, style);
		agregarCelda(filaCol, initCol++, lineaBean.var52, style);
		agregarCelda(filaCol, initCol++, lineaBean.var53, style);
		agregarCelda(filaCol, initCol++, lineaBean.var54, style);
		agregarCelda(filaCol, initCol++, lineaBean.var55, style);
		agregarCelda(filaCol, initCol++, lineaBean.var56, style);
		agregarCelda(filaCol, initCol++, lineaBean.var57, style);
		agregarCelda(filaCol, initCol++, lineaBean.var58, style);
		agregarCelda(filaCol, initCol++, lineaBean.var59, style);
		agregarCelda(filaCol, initCol++, lineaBean.var60, style);
		agregarCelda(filaCol, initCol++, lineaBean.var61, style);
		agregarCelda(filaCol, initCol++, lineaBean.var62, style);
		agregarCelda(filaCol, initCol++, lineaBean.var63, style);
		agregarCelda(filaCol, initCol++, lineaBean.var64, style);
		agregarCelda(filaCol, initCol++, lineaBean.var65, style);
		agregarCelda(filaCol, initCol++, lineaBean.var66, style);
		agregarCelda(filaCol, initCol++, lineaBean.var67, style);
		agregarCelda(filaCol, initCol++, lineaBean.var68, style);
		agregarCelda(filaCol, initCol++, lineaBean.var69, style);
		agregarCelda(filaCol, initCol++, lineaBean.var70, style);
		agregarCelda(filaCol, initCol++, lineaBean.var71, style);
		agregarCelda(filaCol, initCol++, lineaBean.var72, style);
		agregarCelda(filaCol, initCol++, lineaBean.var73, style);
		agregarCelda(filaCol, initCol++, lineaBean.var74, style);
		agregarCelda(filaCol, initCol++, lineaBean.var75, style);
		agregarCelda(filaCol, initCol++, lineaBean.var76, style);
		agregarCelda(filaCol, initCol++, lineaBean.var77, style);
		agregarCelda(filaCol, initCol++, lineaBean.var78, style);
		agregarCelda(filaCol, initCol++, lineaBean.var79, style);
		agregarCelda(filaCol, initCol++, lineaBean.var80, style);
		agregarCelda(filaCol, initCol++, lineaBean.var81, style);
		agregarCelda(filaCol, initCol++, lineaBean.var82, style);
		agregarCelda(filaCol, initCol++, lineaBean.var83, style);
		agregarCelda(filaCol, initCol++, lineaBean.var84, style);
		agregarCelda(filaCol, initCol++, lineaBean.var85, style);
		agregarCelda(filaCol, initCol++, lineaBean.var86, style);
		agregarCelda(filaCol, initCol++, lineaBean.var87, style);
		agregarCelda(filaCol, initCol++, lineaBean.var88, style);
		agregarCelda(filaCol, initCol++, lineaBean.var89, style);
		agregarCelda(filaCol, initCol++, lineaBean.var90, style);
		agregarCelda(filaCol, initCol++, lineaBean.var91, style);
		agregarCelda(filaCol, initCol++, lineaBean.var92, style);
		agregarCelda(filaCol, initCol++, lineaBean.var93, style);
		agregarCelda(filaCol, initCol++, lineaBean.var94, style);
		agregarCelda(filaCol, initCol++, lineaBean.var95, style);
		agregarCelda(filaCol, initCol++, lineaBean.var96, style);
		agregarCelda(filaCol, initCol++, lineaBean.var97, style);
		agregarCelda(filaCol, initCol++, lineaBean.var98, style);
		agregarCelda(filaCol, initCol++, lineaBean.var99, style);
		agregarCelda(filaCol, initCol++, lineaBean.var100, style);
		agregarCelda(filaCol, initCol++, lineaBean.var101, style);
		agregarCelda(filaCol, initCol++, lineaBean.var102, style);
		agregarCelda(filaCol, initCol++, lineaBean.var103, style);
		agregarCelda(filaCol, initCol++, lineaBean.var104, style);
		agregarCelda(filaCol, initCol++, lineaBean.var105, style);
		agregarCelda(filaCol, initCol++, lineaBean.var106, style);
		agregarCelda(filaCol, initCol++, lineaBean.var107, style);
		agregarCelda(filaCol, initCol++, lineaBean.var108, style);
		agregarCelda(filaCol, initCol++, lineaBean.var109, style);
		agregarCelda(filaCol, initCol++, lineaBean.var110, style);
		agregarCelda(filaCol, initCol++, lineaBean.var111, style);
		agregarCelda(filaCol, initCol++, lineaBean.var112, style);
		agregarCelda(filaCol, initCol++, lineaBean.var113, style);
		agregarCelda(filaCol, initCol++, lineaBean.var114, style);
		agregarCelda(filaCol, initCol++, lineaBean.var115, style);
		agregarCelda(filaCol, initCol++, lineaBean.var116, style);
		agregarCelda(filaCol, initCol++, lineaBean.var117, style);
		agregarCelda(filaCol, initCol++, lineaBean.var118, style);
	}
}
